/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managers;

import catalogos.ExtraccionCatalogos;
import conexionBD.ConexionServidor;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlOutputLabel;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.SelectItem;

/**
 *
 * @author olvarey
 */
@ManagedBean(name = "managerCrearEstadisticas")
@SessionScoped
public class managerCrearEstadisticas implements Serializable {

    private List<Estadistica> filtro;
    private Estadistica selectedRow;
    private int departamentoSeleccionadoFilter;
    private int municipioSeleccionadoFilter;
    private int estadoSeleccionadoFilter;
    private int tecnicoSeleccionadoFilter;
    private HtmlSelectOneMenu municipioEnable;
    private HtmlOutputLabel municipioLabelEnable;
    private ExtraccionCatalogos catalgoEstadisticas = new ExtraccionCatalogos();
    private List<EjesEstadistica> ejes;

    public managerCrearEstadisticas() throws Exception {
        ejes = new ArrayList<EjesEstadistica>();
        populateEjes();
        filtro = new ArrayList<Estadistica>();
        populateFilter();
    }

    public List<Estadistica> getFiltro() {
        return filtro;
    }

    public void setFiltro(List<Estadistica> filtro) {
        this.filtro = filtro;
    }

    public Estadistica getSelectedRow() {
        return selectedRow;
    }

    public void setSelectedRow(Estadistica selectedRow) {
        this.selectedRow = selectedRow;
    }

    public ExtraccionCatalogos getCatalgoEstadisticas() {
        return catalgoEstadisticas;
    }

    public void setCatalgoEstadisticas(ExtraccionCatalogos catalgoEstadisticas) {
        this.catalgoEstadisticas = catalgoEstadisticas;
    }

    public List<EjesEstadistica> getEjes() {
        return ejes;
    }

    public void setEjes(List<EjesEstadistica> ejes) {
        this.ejes = ejes;
    }

    public int getDepartamentoSeleccionadoFilter() {
        return departamentoSeleccionadoFilter;
    }

    public void setDepartamentoSeleccionadoFilter(int departamentoSeleccionadoFilter) {
        this.departamentoSeleccionadoFilter = departamentoSeleccionadoFilter;
    }

    public int getEstadoSeleccionadoFilter() {
        return estadoSeleccionadoFilter;
    }

    public void setEstadoSeleccionadoFilter(int estadoSeleccionadoFilter) {
        this.estadoSeleccionadoFilter = estadoSeleccionadoFilter;
    }

    public int getMunicipioSeleccionadoFilter() {
        return municipioSeleccionadoFilter;
    }

    public void setMunicipioSeleccionadoFilter(int municipioSeleccionadoFilter) {
        this.municipioSeleccionadoFilter = municipioSeleccionadoFilter;
    }

    public int getTecnicoSeleccionadoFilter() {
        return tecnicoSeleccionadoFilter;
    }

    public void setTecnicoSeleccionadoFilter(int tecnicoSeleccionadoFilter) {
        this.tecnicoSeleccionadoFilter = tecnicoSeleccionadoFilter;
    }

    public HtmlSelectOneMenu getMunicipioEnable() {
        return municipioEnable;
    }

    public void setMunicipioEnable(HtmlSelectOneMenu municipioEnable) {
        this.municipioEnable = municipioEnable;
    }

    public HtmlOutputLabel getMunicipioLabelEnable() {
        return municipioLabelEnable;
    }

    public void setMunicipioLabelEnable(HtmlOutputLabel municipioLabelEnable) {
        this.municipioLabelEnable = municipioLabelEnable;
    }

    private void populateFilter() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from vista_estadistica");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                filtro.add(new Estadistica(rs.getString("idexpediente"), rs.getString("idinmueble"), rs.getString("nombredepartamento"), rs.getString("nombremunicipio"), rs.getString("nombreestadoexp"), rs.getString("nombretecnico"), rs.getString("finalizacionproyec"), rs.getString("nombreusuario")));
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    private void populateEjes() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        Connection con;
        //Extraer contador Estados
        try {
            con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM estado_expediente, expediente WHERE expediente.idestado_expediente = estado_expediente.idestado_expediente AND nombreestadoexp='EN PROCESO'");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                ejes.add(new EjesEstadistica("EN PROCESO", rs.getInt(1)));
            }
            rs.close();
            ps.close();
            con.close();

            con = miConexion.getConnection();
            PreparedStatement ps1 = con.prepareStatement("SELECT COUNT(*) FROM estado_expediente, expediente WHERE expediente.idestado_expediente = estado_expediente.idestado_expediente AND nombreestadoexp='TERMINADO'");
            ResultSet rs1 = ps1.executeQuery();
            while (rs1.next()) {
                ejes.add(new EjesEstadistica("TERMINADO", rs1.getInt(1)));
            }
            rs1.close();
            ps1.close();
            con.close();

            con = miConexion.getConnection();
            PreparedStatement ps2 = con.prepareStatement("SELECT COUNT(*) FROM estado_expediente, expediente WHERE expediente.idestado_expediente = estado_expediente.idestado_expediente AND nombreestadoexp='CONGELADO'");
            ResultSet rs2 = ps2.executeQuery();
            while (rs2.next()) {
                ejes.add(new EjesEstadistica("CONGELADO", rs2.getInt(1)));
            }
            rs2.close();
            ps2.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void regenerateChart(AjaxBehaviorEvent evento) {
        System.out.println("Entro al metodo");
        if (departamentoSeleccionadoFilter == 0 && estadoSeleccionadoFilter == 0 && tecnicoSeleccionadoFilter == 0 ) {
            municipioLabelEnable.setRendered(false);
            municipioEnable.setRendered(false);
            }
        if(departamentoSeleccionadoFilter != 0 && estadoSeleccionadoFilter == 0 && tecnicoSeleccionadoFilter ==0) {
            municipioLabelEnable.setRendered(true);
            municipioEnable.setRendered(true);
        }

    }

    public List<SelectItem> getListaMunicipios() {
        List<SelectItem> municipios = new ArrayList<SelectItem>();
        municipios = catalgoEstadisticas.getListaMunicipiosFiltrados(departamentoSeleccionadoFilter);
        return municipios;
    }
}
